package com.nuanshui.heatedloan.fund.facade;

import com.nuanshui.heatedloan.fund.form.UserAccountBillForm;
import com.nuanshui.heatedloan.fund.form.UserBillInfoForm;
import com.nuanshui.heatedloan.fund.model.BatchPayNum;
import com.nuanshui.heatedloan.fund.model.UserAccountBill;
import com.nuanshui.heatedloan.fund.vo.UserAccountBillVO;
import com.nuanshui.heatedloan.fund.vo.UserBillInfoVO;
import com.nuanshui.heatedloan.pageable.Pager;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;

import java.util.List;
import java.util.Map;


public interface UserAccountBillService {
	/**
	 * 获取账单列表
	 * @param pager
	 * @param userBillInfoForm
	 * @return
	 */
	Pager<UserBillInfoVO> loadPaylist(Pager<UserBillInfoVO> pager , UserBillInfoForm userBillInfoForm);

	/**
	 *
	 * @param userBillInfoForm
	 * @param resultMap
	 * @return
	 */
	Map<String,Object> loadSum(UserBillInfoForm userBillInfoForm,Map<String,Object> resultMap);

	/**
	 *
	 * @param userBillInfoForm
	 * @param resultMap
	 * @return
	 */
	Map<String,Object> loadCount(UserBillInfoForm userBillInfoForm,Map<String,Object> resultMap);

	/**
	 * 根据不同类型得到用户账单
	 * @author Junyan2015
	 * @date 2016年2月18日 下午2:01:33
	 * @param type 0全部，1充值，2提现，3保证金,4余额
	 * @param userId
	 * @param pager
	 * @return
	 */
    List<UserAccountBill> findUserAccountBill(Integer type, String userId, Pageable pager);
	
	/**
	 * 获取账单详情
	 * @author Junyan2015
	 * @date 2016年2月18日 下午2:02:34
	 * @param billId
	 * @return
	 */
    UserAccountBill findBillDetail(String billId);

	/**
	 *
	 * @param dealNum
	 * @return
	 */
	UserAccountBill findBillDetailByDealNum(String dealNum);
	
	/**
	 * 根据不同类型获取所有用户的账单
	 * @author Junyan2015
	 * @date 2016年2月18日 下午2:02:50
	 * @param num
	 * @param pager
	 * @return
	 */
    List<UserAccountBill> findAllUserAccountBill(Integer num, Pageable pager);

	/**
	 * 查找成功的订单信息
	 * @param dealNum
	 * @return
	 */
	UserAccountBill findSuccessAccountBillByPayNum(String dealNum);

    //更新账单状态
	void updateStatusByDealNum(String dealNum, Integer status,Integer subStatus);

	/**
	 * 审核账单
	 * @author Junyan2015
	 * @date 2016年2月18日 下午2:03:20
	 * @param billId
	 * @param type
	 * @param isPass
	 */
    boolean checkUserAction(String billId, String type, Integer isPass);



	/**
	 * 保存账单信息
	 * @param @param userAccountBill
	 * @param @return
	 * @author guohao
	 * @date 2016年7月13日 下午5:54:42
	 * @since $
	 */
   UserAccountBill  insertBillRecord(UserAccountBill userAccountBill);
	
	Long findMaxDealNumByDay(String day, String bizType);

	void insertDealNum(String day, String bizType);

	void incrDealNumByDay(String day, String bizType);
	
	/**
	 * 获取所有的分批支付记录，不成功的也被查询，但是取消的则过滤调
	 * @author Gonzo
	 * @date 2016年11月2日下午7:05:27
	 * @param payNum
	 * @return
	 */
    List<BatchPayNum> findBatchPayNumsByPayNum(String payNum);
	
	/**
	 * 获取成功的分批支付记录
	 * @author Gonzo
	 * @date 2016年11月2日下午7:05:20
	 * @param payNum
	 * @return
	 */
    List<BatchPayNum> findSuccessBatchPayNumsByPayNum(String payNum);
	
	/**
	 * 获取用户未完成的分批支付，状态为1，则表示未支付成功，10表示当前这一份分批支付成功，但是总体还没有成功
	 * @author Gonzo
	 * @date 2016年11月3日下午3:23:41
	 * @param userId
	 * @return
	 */
    String findUserNotEndedBatchPayNum(String userId);

	/**
	 * 更新BatchPayNum状态
	 * @author Gonzo
	 * @date 2016年11月4日下午7:30:11
	 * @param batchPayNum
	 */
    void updateBatchPayNumStatus(BatchPayNum batchPayNum);
	
	/**
	 * 获取到分批记录的总数状态为1-10的还在分批支付中的状态的总数，但是如果是取消的，则过滤
	 * @author Gonzo
	 * @date 2016年11月4日上午10:30:01
	 * @return
	 */
    Integer findBatchPayCountByPayNum(String payNum);
	
	/**
	 * 获取到分批记录的成功或者是取消的分批数量。
	 * @author Gonzo
	 * @date 2016年11月7日下午2:31:13
	 * @param payNum
	 * @return
	 */
    Integer findBatchPaySuccessOrCancelCountByPayNum(String payNum);
    
    public Pager<UserAccountBillVO> list(Pager<UserAccountBillVO> pager, UserAccountBillForm uabf);
    
    String getDes(String dn);
    
    void modifyDes(String newDes, String dealNum);
    
    UserAccountBill getAccountMessage(String dn);
}
